// console.log((function f(n) { return n > 1? n * f(n - 1):n})(10));

// function  remove(arr,item) {
//     return arr.filter(function (value) {
//         return (item != value);
//     });
// }


// function remove2(arr,item) {return arr.filter(value => item!=value)}
//
// var arr2 = remove2([1,2,3,4,5,6],4);
// console.log(arr2);


// for (var i = 0; i < 5; i++) {
//     (function(i) {
//         setTimeout(function () {
//             console.log(i);
//         },i*1000)
//     })(i);
// }

// tostring将interger转为二进制
// var num = 123;
// console.log(num.toString(2));

// sum求和
// var newSum = (...args) => args.reduce((x,y)=> x + y);
// console.log(newSum(1,2,3,4));



// var object = {
//     foo:'bar',
//     func:function () {
//         var self = this;
//         console.log("outer fool:this:" + this.foo);
//         console.log("outer fool:self:" + self.foo);
//         (function () {
//             // console.log(this);
//             console.log("inner fool:this:" + this.foo);
//             console.log("inner fool:self:" + self.foo);
//         }())
//     }
// };
// object.func();
// 在内部函数中就不指向object了,this.foo在内部函数是未被定义的，所以为undefined
//outer fool:this:bar
// outer fool:self:bar
// inner fool:this:undefined
// inner fool:self:bar


// hasOwnProperty用于查找改对象是否有相应属性，记得属性加引号"",注：永远不会查到原对象
// var obj = {
//     foo:"bar",
//     ctx:"ansel"
// };
// console.log(obj.hasOwnProperty("ao"));


// console.log([4,5,6].map(parseInt(1,4)));

// "use strict";
// (function(){
//     var a = b = 2;
// })();

// var a = b = 3;
// b = 3;
// var a = b;

// console.log(typeof a!== 'undefined');
// console.log(typeof b!== 'undefined');

// var dad = {};
// var son = {};
// function show() {
//     return this;
// }

// var newShow = show.bind(dad);
// console.log(newShow);
// var newShow2 = newShow.bind(son);
//
// console.log(newShow() == dad);
// console.log(newShow2() == son);
// bind返回了一个带有this指向的函数但是bind之后的新函数再次bind的话无法改变bind的指向，也就是说bind改变this指向只能一次

// function sum1(x){
//     if(arguments.length === 2){
//         return arguments[0] + arguments[1];
//     }else{
//         return function (y) {
//             return x+y;
//         }
//     }
// }
//
// function sum2(x,y) {
//     if(y !== undefined){
//         return x + y;
//     }else{
//         return function (y) {
//             return x + y;
//         }
//     }
// }
//
// console.log(sum1(1,2));
// console.log(sum1(1)(2));


// function Person() {
//
// }
//
// var person = new Person();
//
// console.log(person.__proto__ == Person.prototype);
// console.log(person.__proto__.__proto__ == Object.prototype);
// console.log(person.__proto__.__proto__.__proto__);
// console.log(Person.__proto__ == Function.prototype);

// var name = "cccc";
// var animal = {
//     name:"右耳",
//     sayName(){
//         console.log(this.name);
//     }
// };
// var person = {
//     name:"ansel"
// };
//
// animal.sayName();
// animal.sayName.call(person);
// animal.sayName.apply(window);

// (function(x){
//     return (function (y) {
//         console.log(x);
//     })(2)
// })(1);


// (function () {
//     try{
//         throw new Error();
//     }catch(x) {
//         var x = 1,y = 2;
//         console.log(x);
//     }
//     console.log(z);
//     console.log(y);
// })();

// console.log(typeof typeof 1);

// js内置对象
// Number、Object、Array、Boolean、String
// 其他对象：Function、Arguments、Math、Date、RegExp、Error



// console.log(['1','1','1011'].map(parseInt));
// var ctx = parseInt(1,1);
// var res = [111,101,1101].map(n => parseInt(n,2));
// console.log(ctx);
// console.log(res);

console.log("dhwajbdaw".split("").reverse().join(""));